import { Controller } from 'egg';
import utils from '~/utils';
import ErrorCodeConstant from "~/constants/error_code";

export default class CrudController extends Controller {

    async list() {
        const { ctx } = this;

        try {
            const info = await ctx.service.crud.list();
            ctx.body = utils.resp.success('请求成功', info);
        } catch (err: any) {
            if (err instanceof Error) {
                ctx.body = utils.resp.fail(err.message);
            } else {
                ctx.body = utils.resp.fail(ErrorCodeConstant.getDesc(ErrorCodeConstant.INVALID), ErrorCodeConstant.INVALID);
            }
            return false;
        }
    }

    async create() {
        const { ctx } = this;

        // 验证
        // try {
        //     ctx.validate({
        //         id: {
        //             type: 'number',
        //             format: /^\d+$/,
        //             required: true
        //         },
        //     });
        // } catch (err: any) {
        //     let message = err.errors[0]['field'] + ' ' + err.errors[0]['message'];
        //     ctx.body = utils.resp.fail(message);
        //     return false;
        // }

        try {
            await ctx.service.crud.create();
            ctx.body = utils.resp.success('请求成功');
        } catch (err: any) {
            if (err instanceof Error) {
                ctx.body = utils.resp.fail(err.message);
            } else {
                ctx.body = utils.resp.fail(ErrorCodeConstant.getDesc(ErrorCodeConstant.INVALID), ErrorCodeConstant.INVALID);
            }
            return false;
        }
    }

    async update() {
        const { ctx } = this;

        // 验证
        // try {
        //     ctx.validate({
        //         id: {
        //             type: 'number',
        //             format: /^\d+$/,
        //             required: true
        //         },
        //     });
        // } catch (err: any) {
        //     let message = err.errors[0]['field'] + ' ' + err.errors[0]['message'];
        //     ctx.body = utils.resp.fail(message);
        //     return false;
        // }

        try {
            await ctx.service.crud.update();
            ctx.body = utils.resp.success('请求成功');
        } catch (err: any) {
            if (err instanceof Error) {
                ctx.body = utils.resp.fail(err.message);
            } else {
                ctx.body = utils.resp.fail(ErrorCodeConstant.getDesc(ErrorCodeConstant.INVALID), ErrorCodeConstant.INVALID);
            }
            return false;
        }
    }

    async detail() {
        const { ctx } = this;

        // try {
        //     ctx.validate({
        //         id: {
        //             type: 'number',
        //             format: /^\d+$/,
        //             required: true
        //         }
        //     });
        // } catch (err: any) {
        //     let message = err.errors[0]['field'] + ' ' + err.errors[0]['message'];
        //     ctx.body = utils.resp.fail(message);
        //     return false;
        // }

        const { id } = ctx.request.body;

        try {
            const info = await ctx.service.crud.detail(id);
            ctx.body = utils.resp.success('请求成功', info);
        } catch (err: any) {
            ctx.body = utils.resp.fail(err.message);
        }
    }

    async delete() {
        const { ctx } = this;

        try {
            ctx.validate({
                id: {
                    type: 'number',
                    format: /^\d+$/,
                    required: true
                },
            });
        } catch (err: any) {
            let message = err.errors[0]['field'] + ' ' + err.errors[0]['message'];
            ctx.body = utils.resp.fail(message);
            return false;
        }

        const { id } = ctx.request.body;

        try {
            await ctx.service.crud.delete(id);
            ctx.body = utils.resp.success('请求成功');
        } catch (err: any) {
            ctx.body = utils.resp.fail(err.message);
        }
    }

}